FSx for NetApp ONTAP を作成し、EC2 インスタンス(RHEL9)に NFS マウントしてみた(スタンダード作成)

FSx for NetApp ONTAP を作成し、EC2 インスタンス(RHEL9)に NFS マウントしてみた(スタンダード作成)

FSx for NetApp ONTAP をスタンダード作成し、詳細を確認しました。また、RHEL9 に NFS マウントしました。
Clock Icon2023.09.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コーヒーが好きな emi です。

FSx for NetApp ONTAP を AWS マネジメントコンソールから作成する際、クイック作成とスタンダード作成が選べます。設定値を確認したかったので、スタンダード作成から作成してみました。

クイック作成の方法についてはこちらのブログをご参照ください。

FSx for NetApp ONTAP のコンポーネント(ファイルシステム、SVM、ボリューム等)については以下のブログを参照ください。

また、作成した FSx for NetApp ONTAP を EC2 インスタンス(RHEL9)に NFS マウントして動作確認しました。

構成図

今回作成した構成はこちらです。

事前準備

事前準備では VPC、セキュリティグループ、EC2 を作成します。

VPC

RHEL9 に SSM Agent と mount コマンドをインストールする必要があるので NAT Gateway を設置します。
今回は以下の図のように CIDR を設定しました。

セキュリティグループ

EC2 用セキュリティグループと FSx for NetApp ONTAP のファイルシステム用セキュリティグループを二つ作成します。

  • EC2 用セキュリティグループ(emiki_test_fsxn-ec2-sg)
    • セッションマネージャー利用のためアウトバウンド TCP 443 が許可されていればよい
許可 タイプ プロトコル ポート範囲 ソース 説明
アウトバウンド すべてのトラフィック すべて すべて 0.0.0.0/0 default
  • FSx for NetApp ONTAP のファイルシステム用セキュリティグループ(emiki_test_fsxn-fs-sg)
    • ファイルシステムのクラスター間エンドポイント(優先サブネット)に付与するセキュリテイグループ
    • 本検証では NFS マウントを実施するため、EC2 からの NFS 通信が許可されていればよい
許可 タイプ プロトコル ポート範囲 ソース 説明
インバウンド NFS TCP 2049 EC2 用セキュリティグループ(emiki_test_fsxn-ec2-sg) from ec2_nfs
アウトバウンド すべてのトラフィック すべて すべて 0.0.0.0/0 default

EC2

FSx for NetApp ONTAP ストレージを NFS マウントするのに RHEL9 を作成します。
FSx for NetApp ONTAP ファイルシステムが作成されるまで 25~45 分程度待ち時間が発生するので、検証される方は先にファイルシステムを作成してから EC2 を作成する方がいいと思います。

セキュリティグループは先ほど作成した EC2 用のセキュリティグループを設定します。
RHEL9 はデフォルトで SSM Agent がインストールされていないので、ユーザーデータで SSM Agent をインストールします。以下のブログを参照しました。

EC2 を起動したら、セッションマネージャーで接続できるか確認しておきます。

FSx for NetApp ONTAP スタンダード作成

FSx for NetApp ONTAP を作成していきます。FSx コンソール画面を開き、「ファイルシステムを作成」をクリックします。

FSx for NetApp ONTAP を選択して「次へ」をクリックします。

「スタンダード作成」を選択します。

  • ファイルシステム名(今回は emiki_test_fsxn と指定)
    • 最大 256 文字までで、空白、数字、記号(+ - = . _ : /)が使えます。
  • デプロイタイプ(今回はマルチ AZ を指定)
    • マルチ AZ かシングル AZ が選べます。
  • SSD ストレージ容量(今回は 1024 GiB と指定)
    • 最小 1024 GiB ~最大 192 TiB
  • プロビジョンド SSD IOPS(今回は「自動 (SSD ストレージ 1 GiB あたり 3 IOPS)」を指定)
    • Amazon FSx ではストレージ容量の 1 GiB あたり 3 IOPS を提供します。必要に応じて追加の SSD IOPS をプロビジョンすることもできます。
    • 「自動 (SSD ストレージ 1 GiB あたり 3 IOPS)」「ユーザープロビジョンド」が選べます。
  • スループットキャパシティ(今回は「推奨されるスループット容量(128 MB/秒)」を指定)
    • 「推奨されるスループット容量(128 MB/秒)」「スループットキャパ容量を指定」が選べます。

作成済みの VPC とセキュリティグループを指定します。

  • 推奨サブネット
    • マルチ AZ 構成を選択したので、優先サブネットとスタンバイサブネットを指定します。ap-northeast-1a のプライベートサブネットにしました。
  • スタンバイサブネット
    • ap-northeast-1c のプライベートサブネットにしました。
  • VPC ルートテーブル情報
    • ファイルシステムに関連付ける VPC ルートテーブルを指定します。「VPC のメインルートテーブル」「1 つ以上の VPC ルートテーブルを選択」を選べます。
    • 「推奨サブネット」と「スタンバイサブネット」に紐づいているルートテーブルを指定したいので、「1 つ以上の VPC ルートテーブルを選択」を選びました。
  • エンドポイント IP アドレス範囲情報
    • ファイルシステムにアクセスするエンドポイントが作成される IP アドレス範囲を指定します。
      • 「VPC から未割り当ての IP アドレス範囲」「VPC 外のフローティング IP アドレス範囲」「IP アドレス範囲を入力」が選べます。
      • 他の AWS サービス、VPC ピアリング、オンプレミスからのアクセスなどを加味すると「VPC から未割り当ての IP アドレス範囲」を選択するのが最もシンプルです。

暗号化キーはデフォルトのままにします。

  • ファイルシステム管理パスワード
    • ONTAP CLI または REST API にアクセスするために使用できる、ファイルシステムの「fsxadmin」ユーザーのパスワードを指定します。
    • 後からでも設定できるので今回は「パスワードを指定しない」で進めました。
  • ストレージ仮想マシン名(emiki_test_fsxn_svm01)
  • SVM 管理パスワード
    • ONTAP CLI または REST API にアクセスするために使用できる、SVM の「vsadmin」ユーザーのパスワードを指定します。
    • 後からでも設定できるので今回は「パスワードを指定しない」で進めました。
  • ボリュームのセキュリティスタイル(今回は Linux で NFS マウントをするので「Unix (Linux)」を指定)
    • NTFS ACL と UNIX ACL のどちらが優先されるか指定します。
    • 「Unix (Linux)」「NTFS」「混合」から選べます。
    • 混合(MIXED)モードは上級ユーザーにのみ推奨されるようです。
  • Active Directory
    • Active Directory ドメインへの参加有無を指定します。今回は指定しません。
  • ボリューム名(今回は emiki_test_fsxn_vol01 と指定)
    • 最大 203 文字の英数字と記号(_ .)が使えます。
  • ボリュームサイズ(今回は 10240 MiB = 10 GiB と指定)
    • 最小 20 MiB ~最大 314,572,800 MiB
  • ボリュームタイプ(今回は Read-Write (RW) を指定)
    • ファイルシステムの最初のボリュームを Read-Write (RW) ボリュームにするか、SnapMirror で使用する読み取り専用 Data Protection (DP) ボリュームにするかを選択します。
  • ジャンクションパス
    • ボリュームがマウントされるファイルシステム内の場所を指定します。
    • 何も指定せずデフォルトだと「/vol」になります。
  • ストレージ効率(今回は有効 (推奨)を指定)
    • ボリュームで ONTAP ストレージ効率 (重複排除、圧縮、コンパクト化) を有効にするかどうかを選択します。
  • スナップショットポリシー(今回は Default を指定)
    • ボリュームのスナップショットポリシーによって、ボリュームのスナップショットが自動的に作成されるスケジュールが決まります。
    • 「Default」「Default-weekly」「None」「カスタムポリシー」が選べます。
  • 容量プールの階層化ポリシー(今回は自動のまま)
    • 低コストの容量プールストレージへのデータの自動階層化を有効にできます。
  • 階層化ポリシーの冷却期間(今回は 31 日のまま)
    • アクセスされていないデータがコールドとしてマークされ、キャパシティプールストレージに移動されるまでの日数を定義します。自動ポリシーとスナップショットのポリシーにのみ影響します。
    • デフォルト値は 31 日です。有効な値は 2~183 日です。

バックアップとメンテナンスのスケジュールを指定します。検証のためバックアップは無効にしました。
週次メンテナンスウィンドウは UTC で指定します。金曜日 16:00 UTC = 土曜日 1:00 JST です。

タグは指定せず「次へ」をクリックします。

ちなみに Name タグを指定しようとしたらエラーになりました。一番最初に指定したファイルシステム名が Name タグとして使われるようです。

確認画面が表示されます。作成後に編集可能かどうかわかるのがいいですね。

最後に「ファイルシステムを作成」をクリックします。

ファイルシステムができるまで 25~45 分待ち時間が発生します。今回は 23 分で作成完了しました。

FSx for NetApp ONTAP の詳細確認

作成した FSx for NetApp ONTAP のファイルシステム、SVM、ボリュームを確認してみましょう。
FSx for NetApp ONTAP のファイルシステム、SVM、ボリュームについては以下のブログを参照ください。

ファイルシステム

ファイルシステムの詳細画面を開くと以下のようになっています。SSD ストレージ容量、スループットキャパシティ、プロビジョンド IOPS が変更できるのが分かります。
ネットワークとセキュリティタブでは VPC や各種エンドポイントの DNS 名と IP アドレスが確認できます。

ちなみにセキュリテイグループの変更は優先サブネットのネットワークインターフェースのリンクから実施できます。

詳細は以下ブログを参照ください。

管理タブからも各種エンドポイントが確認できます。ファイルシステムの ONTAP 管理者(fsxadmin)のパスワードはここから設定できます。

ストレージ仮想マシンタブでは、ファイルシステムに存在するストレージ仮想マシン(SVM)の一覧が確認できます。

ストレージ仮想マシン(SVM)

SVM の詳細画面はこのようになっています。エンドポイントタブで各種エンドポイントの DNS 名や IP アドレスを確認できます。

管理タブを開きます。SVM 管理(svmadmin)のパスワードはここから設定できます。

ボリュームタブでは、SVM に存在するボリュームの一覧が確認できます。末尾に「_root」がついたボリュームは自動作成されるシステム領域のようなので、通常業務には使わない方がいいと思います。

ボリューム

ボリュームの詳細画面ではジャンクションパスなどを確認できます。

ルートテーブル

ここで、ファイルシステム作成時に指定したルートテーブルを見てみましょう。
このように、ファイルシステムの管理エンドポイントと、SVM の管理エンドポイント向けのルートが追記されていることが分かります。
ファイルシステムを作成するサブネットに紐づいたルートテーブルにルートを追加するように設定しないと、管理エンドポイント経由の通信がうまくいかないので注意してください。

EC2 インスタンスに NFS マウントする

以下ドキュメントを参考に FSx for NetApp ONTAP のボリュームを RHEL9 に NFS マウントしてみます。

セッションマネージャーで RHEL9 にログインします。
まず RHEL9 に mount コマンド(に必要な NFS ヘルパープログラム)がインストールされていないので、インストールしておきます。Amazon Linux 2 の場合はインストール済みですので不要です。

sudo yum install nfs-utils
実行結果(クリックで展開)
sh-5.1$ sudo yum install nfs-utils
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)                                                          500 kB/s |  24 MB     00:48
Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)                                                              52 MB/s |  13 MB     00:00
Red Hat Enterprise Linux 9 Client Configuration                                                                              34 kB/s | 3.4 kB     00:00
Last metadata expiration check: 0:00:01 ago on Wed 30 Aug 2023 01:33:44 PM UTC.
Dependencies resolved.
============================================================================================================================================================
 Package                              Architecture                 Version                              Repository                                     Size
============================================================================================================================================================
Installing:
 nfs-utils                            x86_64                       1:2.5.4-18.el9                       rhel-9-baseos-rhui-rpms                       459 k
Installing dependencies:
 gssproxy                             x86_64                       0.8.4-5.el9_2                        rhel-9-baseos-rhui-rpms                       114 k
 keyutils                             x86_64                       1.6.3-1.el9                          rhel-9-baseos-rhui-rpms                        78 k
 libev                                x86_64                       4.33-5.el9                           rhel-9-baseos-rhui-rpms                        56 k
 libnfsidmap                          x86_64                       1:2.5.4-18.el9                       rhel-9-baseos-rhui-rpms                        66 k
 libtirpc                             x86_64                       1.3.3-1.el9                          rhel-9-baseos-rhui-rpms                        96 k
 libverto-libev                       x86_64                       0.3.2-3.el9                          rhel-9-baseos-rhui-rpms                        15 k
 quota                                x86_64                       1:4.06-6.el9                         rhel-9-baseos-rhui-rpms                       202 k
 quota-nls                            noarch                       1:4.06-6.el9                         rhel-9-baseos-rhui-rpms                        81 k
 rpcbind                              x86_64                       1.2.6-5.el9                          rhel-9-baseos-rhui-rpms                        62 k
 sssd-nfs-idmap                       x86_64                       2.8.2-2.el9                          rhel-9-baseos-rhui-rpms                        44 k

Transaction Summary
============================================================================================================================================================
Install  11 Packages

Total download size: 1.2 M
Installed size: 3.2 M
Is this ok [y/N]: y
Downloading Packages:
(1/11): libverto-libev-0.3.2-3.el9.x86_64.rpm                                                                               347 kB/s |  15 kB     00:00
(2/11): libev-4.33-5.el9.x86_64.rpm                                                                                         1.1 MB/s |  56 kB     00:00
(3/11): quota-nls-4.06-6.el9.noarch.rpm                                                                                     1.5 MB/s |  81 kB     00:00
(4/11): rpcbind-1.2.6-5.el9.x86_64.rpm                                                                                      3.9 MB/s |  62 kB     00:00
(5/11): quota-4.06-6.el9.x86_64.rpm                                                                                         8.0 MB/s | 202 kB     00:00
(6/11): nfs-utils-2.5.4-18.el9.x86_64.rpm                                                                                    20 MB/s | 459 kB     00:00
(7/11): sssd-nfs-idmap-2.8.2-2.el9.x86_64.rpm                                                                               2.9 MB/s |  44 kB     00:00
(8/11): libtirpc-1.3.3-1.el9.x86_64.rpm                                                                                     3.9 MB/s |  96 kB     00:00
(9/11): keyutils-1.6.3-1.el9.x86_64.rpm                                                                                     6.5 MB/s |  78 kB     00:00
(10/11): libnfsidmap-2.5.4-18.el9.x86_64.rpm                                                                                5.5 MB/s |  66 kB     00:00
(11/11): gssproxy-0.8.4-5.el9_2.x86_64.rpm                                                                                  5.3 MB/s | 114 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                       8.9 MB/s | 1.2 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                    1/1
  Installing       : libtirpc-1.3.3-1.el9.x86_64                                                                                                       1/11
  Installing       : libnfsidmap-1:2.5.4-18.el9.x86_64                                                                                                 2/11
  Running scriptlet: rpcbind-1.2.6-5.el9.x86_64                                                                                                        3/11
  Installing       : rpcbind-1.2.6-5.el9.x86_64                                                                                                        3/11
  Running scriptlet: rpcbind-1.2.6-5.el9.x86_64                                                                                                        3/11
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /usr/lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /usr/lib/systemd/system/rpcbind.socket.

  Installing       : keyutils-1.6.3-1.el9.x86_64                                                                                                       4/11
  Installing       : libev-4.33-5.el9.x86_64                                                                                                           5/11
  Installing       : libverto-libev-0.3.2-3.el9.x86_64                                                                                                 6/11
  Installing       : gssproxy-0.8.4-5.el9_2.x86_64                                                                                                     7/11
  Running scriptlet: gssproxy-0.8.4-5.el9_2.x86_64                                                                                                     7/11
  Installing       : quota-nls-1:4.06-6.el9.noarch                                                                                                     8/11
  Installing       : quota-1:4.06-6.el9.x86_64                                                                                                         9/11
  Running scriptlet: nfs-utils-1:2.5.4-18.el9.x86_64                                                                                                  10/11
  Installing       : nfs-utils-1:2.5.4-18.el9.x86_64                                                                                                  10/11
  Running scriptlet: nfs-utils-1:2.5.4-18.el9.x86_64                                                                                                  10/11
  Installing       : sssd-nfs-idmap-2.8.2-2.el9.x86_64                                                                                                11/11
  Running scriptlet: sssd-nfs-idmap-2.8.2-2.el9.x86_64                                                                                                11/11
  Verifying        : quota-nls-1:4.06-6.el9.noarch                                                                                                     1/11
  Verifying        : libverto-libev-0.3.2-3.el9.x86_64                                                                                                 2/11
  Verifying        : libev-4.33-5.el9.x86_64                                                                                                           3/11
  Verifying        : quota-1:4.06-6.el9.x86_64                                                                                                         4/11
  Verifying        : rpcbind-1.2.6-5.el9.x86_64                                                                                                        5/11
  Verifying        : nfs-utils-1:2.5.4-18.el9.x86_64                                                                                                   6/11
  Verifying        : libtirpc-1.3.3-1.el9.x86_64                                                                                                       7/11
  Verifying        : sssd-nfs-idmap-2.8.2-2.el9.x86_64                                                                                                 8/11
  Verifying        : keyutils-1.6.3-1.el9.x86_64                                                                                                       9/11
  Verifying        : libnfsidmap-1:2.5.4-18.el9.x86_64                                                                                                10/11
  Verifying        : gssproxy-0.8.4-5.el9_2.x86_64                                                                                                    11/11
Installed products updated.

Installed:
  gssproxy-0.8.4-5.el9_2.x86_64     keyutils-1.6.3-1.el9.x86_64     libev-4.33-5.el9.x86_64   libnfsidmap-1:2.5.4-18.el9.x86_64 libtirpc-1.3.3-1.el9.x86_64
  libverto-libev-0.3.2-3.el9.x86_64 nfs-utils-1:2.5.4-18.el9.x86_64 quota-1:4.06-6.el9.x86_64 quota-nls-1:4.06-6.el9.noarch     rpcbind-1.2.6-5.el9.x86_64
  sssd-nfs-idmap-2.8.2-2.el9.x86_64

Complete!
sh-5.1$

EC2 インスタンスで FSx for NetApp ONTAP 用に新しいディレクトリを作成します。以下のコマンドでは /fsx というディレクトリを作成しています。

sudo mkdir /fsx  
実行結果(クリックで展開)
sh-5.1$ sudo mkdir /fsx
sh-5.1$

FSx for NetApp ONTAP のボリュームをマウントします。マウントするには以下のコマンドを実行します。

sudo mount -t nfs svm-dns-name:/volume-junction-path /fsx

svm-dns-namevolume-junction-path には、作成した FSx for NetApp ONTAP の SVM の DNS 名とボリュームのジャンクションパスを入れてください。
SVM の DNS 名は SVM のエンドポイントタブで、ジャンクションパスはボリュームの詳細画面で確認できます。

また、ボリュームの詳細画面の右上の「アタッチ」をクリックするとマウントコマンドを確認することができます。

svm-dns-namevolume-junction-path に値を入れたコマンドは以下になります。

sudo mount -t nfs svm-0e6e78bcada1526ec.fs-0c942e8e70a3ec0d9.fsx.ap-northeast-1.amazonaws.com:/vol1 /fsx  
実行結果(クリックで展開)
sh-5.1$ sudo mount -t nfs svm-0e6e78bcada1526ec.fs-0c942e8e70a3ec0d9.fsx.ap-northeast-1.amazonaws.com:/vol1 /fsx
sh-5.1$

マウントはすぐに終わりました。

動作確認

NFS マウントが正常に行われたかを確認するには、df コマンドまたは mount コマンドを使用します。

df コマンドはマウントされたファイルシステムのディスクスペースの使用状況を表示します。-h オプション(--human-readable)を付けると、サイズに応じて読みやすい単位で表示します。実行結果の出力の中に、マウントした NFS ボリュームのパスが表示されていれば、マウントが成功しています。

df -h
実行結果(クリックで展開)
sh-5.1$ df -h
Filesystem                                                                         Size  Used Avail Use% Mounted on
devtmpfs                                                                           4.0M     0  4.0M   0% /dev
tmpfs                                                                              372M     0  372M   0% /dev/shm
tmpfs                                                                              149M  3.6M  146M   3% /run
/dev/nvme0n1p4                                                                     9.4G  1.4G  8.0G  15% /
/dev/nvme0n1p3                                                                     495M  153M  343M  31% /boot
/dev/nvme0n1p2                                                                     200M  8.0K  200M   1% /boot/efi
svm-0e6e78bcada1526ec.fs-0c942e8e70a3ec0d9.fsx.ap-northeast-1.amazonaws.com:/vol1  9.5G  448K  9.5G   1% /fsx
sh-5.1$

ハイライトで示したこの行が FSx NetApp ONTAP のボリュームですね。

svm-0e6e78bcada1526ec.fs-0c942e8e70a3ec0d9.fsx.ap-northeast-1.amazonaws.com:/vol1  9.5G  448K  9.5G   1% /fsx

mount コマンドは、システム上のすべてのマウントされたファイルシステムを表示します。
実行結果の出力の中に、マウントした NFS ボリュームのパスとともに type nfs または type nfs4 が表示されていれば、マウントが成功しています。出力が多かったので grep で結果を絞りました。

mount | grep svm
実行結果(クリックで展開)
sh-5.1$ mount | grep svm
svm-0e6e78bcada1526ec.fs-0c942e8e70a3ec0d9.fsx.ap-northeast-1.amazonaws.com:/vol1 on /fsx type nfs4 (rw,relatime,vers=4.2,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.10.226,local_lock=none,addr=10.0.255.236)
sh-5.1$

マウントが成功しているようですね。

では 動作確認 を参考に、1GB の書き込み操作を実施してみます。

sudo dd if=/dev/zero of=/fsx/test.tmp ibs=1M obs=1M count=1000
  • dd:ファイルを変換し、コピーします。
  • if=/dev/zero:入力ファイル if として /dev/zero を指定しています。/dev/zero は特殊なファイルで、中身は大量の NULL 文字です。読み取り要求があると無限に NULL を出力します。
  • of=/fsx/test.tmp:出力ファイル of として /fsx/test.tmp を指定しています。/fsx/test.tmp という名前の新しいファイルを作成(または上書き)します。
  • ibs=1M obs=1M:入力ブロックサイズ ibs と出力ブロックサイズ obs を 1MB に設定します。dd コマンドが一度に読み書きするデータの単位を指定しています。
  • count=1000dd コマンドがコピーを行うブロックの数を指定します。1000 ブロックをコピーするとしており、ブロックサイズが 1MB なので、合計で約 1GB のデータをコピーすることを意味します。
実行結果(クリックで展開)
sh-5.1$ sudo dd if=/dev/zero of=/fsx/test.tmp ibs=1M obs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 2.46326 s, 426 MB/s
sh-5.1$

1048576000 bytes (1.0 GB, 1000 MiB) copied, 2.46326 s, 426 MB/s より、コピーされた総バイト数が 1048576000 bytes、コピーにかかった時間が 2.46326 s、スループット(データ転送速度)が 426 MB/s であると分かります。
ファイルシステムのスループットキャパシティが 128 MB/秒 なので、思ったより早いですね。

ボリュームのモニタリングタブを見ると、スループットや IOPS の合計が計測されているのが分かります。

アンマウントも試してみましょう。

sudo umount /fsx
実行結果(クリックで展開)
sh-5.1$ sudo umount /fsx
sh-5.1$

おわりに

FSx for NetApp ONTAP を作成し、RHEL9 にマウント・アンマウントしてみました。FSx for NetApp ONTAP の作成自体は簡単ですが、EC2 インスタンスにマウントする際通信設定がうまくいっていなかったり mount コマンドをインストールする必要があったりしたのでそこの確認に時間がかかりました。
どなたかのお役に立てば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.